package Beans;

import java.io.Serializable;
import java.sql.Time;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * Klasse som tar vare på resultatopplysninger
 * @author Gruppe1
 */
@SessionScoped
@ManagedBean

public class Resultat implements Serializable{
    Time tid = null;
    Deltaker delta = null;
    Klasse klasse = null;
    Lop lop = null;
    int startNr;
    int lopNr;
    boolean editable;
    boolean deleted = false;
    
    /**
     * Sjekker om dette resultatet skal slettes
     * @return true/false
     */
    public boolean isDeleted() {
        return deleted;
    }
    /**
     * Setter om dette objektet skal slettes
     * @param deleted true om det skal slettes, false om det ikke skal slettes. Default er false. Dersom tiden er satt vil man ikke kunne slette dette resultatet.
     */
    public void setDeleted(boolean deleted) {
        if(tid != null && tid.getTime() == 0)
            this.deleted = deleted;
        else
            deleted = false;
    }
    
    /**
     * Setter muligheten for å editere til true eller false
     * @param editable
     */
    public void setEditable(boolean editable) {this.editable = editable; }
    /**
     * Henter ut verdien som forteller om du kan editere eller ikke
     * @return true for editering og false for ikke editering
     */
    public boolean isEditable() { return editable; }

    /**
     * Hent nummeret til et løp
     * @return nummeret til løpet
     */
    public int getLopNr() { return lopNr; }
    /**
     * Sett nummer på løpet
     * @param lopNr
     */
    public void setLopNr(int lopNr) { this.lopNr = lopNr; }
    
    /**
     * Hent startnummeret til en deltaker
     * @return startnummeret til en deltaker
     */
    public int getStartNr() { return startNr; }
    /**
     * Sett startnummeret til en deltaker
     * @param startNr
     */
    public void setStartNr(int startNr) { this.startNr = startNr; }
    
    /**
     * Konstruktør til resultat; tom
     */
    public Resultat(){}
    
    /**
     * Konstruktør til resultat uten edit
     * @param delta
     * @param klasse
     * @param lop
     * @param startNr
     * @param tid
     */
    public Resultat(Deltaker delta, Klasse klasse, Lop lop, int startNr, Time tid) {
        this.delta = delta;
        this.klasse = klasse;
        this.lop = lop;
        this.startNr = startNr;
        this.tid = tid;
    }
    /**
     * Konstruktør med edit
     * @param delta
     * @param klasse
     * @param lop
     * @param startNr
     * @param tid
     * @param edit
     */
    public Resultat(Deltaker delta, Klasse klasse, Lop lop, int startNr, Time tid, boolean edit) {
        this.delta = delta;
        this.klasse = klasse;
        this.lop = lop;
        this.startNr = startNr;
        this.tid = tid;
        this.editable = edit;
    }
    /**
     * Konstruktør uten tid og edit
     * @param delta
     * @param klasse
     * @param lop
     * @param startNr
     */
    public Resultat(Deltaker delta, Klasse klasse, Lop lop, int startNr) {
        this.delta = delta;
        this.klasse = klasse;
        this.lop = lop;
        this.startNr = startNr;
    }
    /**
     * Konstruktør uten startNr, tid og edit
     * @param delta
     * @param klasse
     * @param lop
     */
    public Resultat(Deltaker delta, Klasse klasse, Lop lop) {
        this.delta = delta;
        this.klasse = klasse;
        this.lop = lop;
    }
    /**
     * Konstuktør uten startNr og edit
     * @param delta
     * @param klasse
     * @param lop
     * @param tid
     */
    public Resultat(Deltaker delta, Klasse klasse, Lop lop, Time tid) {
        this.delta = delta;
        this.klasse = klasse;
        this.lop = lop;
        this.tid = tid;
    }
    
    /**
     * Hent deltaker
     * @return deltakeren
     */
    public Deltaker getDelta() {
        return delta;
    }

    /**
     * Sett deltaker
     * @param delta
     */
    public void setDelta(Deltaker delta) {
        this.delta = delta;
    }

    /**
     * Hent klassen deltakeren er registrert i
     * @return klassen med aldersinndeling og kjønn
     */
    public Klasse getKlasse() {
        return klasse;
    }

    /**
     * Sett klassen deltakeren er registrert i
     * @param klasse
     */
    public void setKlasse(Klasse klasse) {
        this.klasse = klasse;
    }

    /**
     * Hent løpet som deltakeren har deltatt i
     * @return løpet som deltakeren har deltatt i
     */
    public Lop getLop() {
        return lop;
    }

    /**
     * Sett løpet som deltakeren deltar i
     * @param lop
     */
    public void setLop(Lop lop) {
        this.lop = lop;
    }

    /**
     * Hent tiden som deltakeren har løpt på
     * @return tiden til deltakeren
     */
    public Time getTid() {
        return tid;
    }

    /**
     * Sett tiden som deltakeren har brukt på løpet
     * @param tid
     */
    public void setTid(Time tid) {
        this.tid = tid;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Resultat other = (Resultat) obj;
        if (this.delta != other.delta && (this.delta == null || !this.delta.equals(other.delta))) {
            return false;
        }
        if (this.klasse != other.klasse && (this.klasse == null || !this.klasse.equals(other.klasse))) {
            return false;
        }
        if (this.lop != other.lop && (this.lop == null || !this.lop.equals(other.lop))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 59 * hash + (this.tid != null ? this.tid.hashCode() : 0);
        hash = 59 * hash + (this.delta != null ? this.delta.hashCode() : 0);
        hash = 59 * hash + (this.klasse != null ? this.klasse.hashCode() : 0);
        hash = 59 * hash + (this.lop != null ? this.lop.hashCode() : 0);
        return hash;
    }
    
}